package com.qtt.app.controller;

import com.qtt.app.common.ApiResponse;
import com.qtt.app.entity.AppCoupon;
import com.qtt.app.entity.AppMyCoupon;
import com.qtt.app.entity.RequestData.AddComment;
import com.qtt.app.entity.RequestData.ExchangeCoupon;
import com.qtt.app.entity.ReturnInfo.ReturnCoupon;
import com.qtt.app.service.AppCouponService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api(tags = "优惠券管理", description = "CouponController")   //tags是api名字，description是简介，value:已废用
@RestController
@RequestMapping("/Coupon")
public class AppCouponController {

    @Autowired
    AppCouponService appCouponService;

    @ApiOperation(value = "根据用户id查找该用户的优惠券(全部、可使用、已使用、已过期)", notes = "isOverdue为true则表示还没过期，false为过期。couponType为单课程优惠券时，suitCourse则是课程general_id,同时会显示课程名courseName;couponType为特定课程优惠券时，suitCourse表示课程类别；couponType为全课程优惠券时，suitCourse为全部;isUsed为1表示已经使用过了，0表示可使用")
    //注意是@PathVariable 不是@PathParam ；这个是路径传值
    @GetMapping("/list/{userId}")
    public ApiResponse<List<ReturnCoupon>> getCouponByUserId(@PathVariable("userId") Long userId,
                                                             @ApiParam(value="flag，查询全部输入1，可使用输入2，已使用输入3，已过期输入4",required = true) @RequestParam(value="flag",required=true) int flag){
        List<ReturnCoupon> returnCouponEntity = appCouponService.getCouponByUserId(userId,flag);
        if (returnCouponEntity.size()!=0){
            return ApiResponse.<List<ReturnCoupon>>builder().code(200).message("查找成功").data(returnCouponEntity).build();
        }
        else {
            return ApiResponse.<List<ReturnCoupon>>builder().code(400).message("该用户暂时没有该类优惠券").data(null).build();
        }
    }


    @ApiOperation(value = "往优惠券库添加一张优惠券", notes = "")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @PostMapping("/list")
    public ApiResponse<String> addCoupon(@ApiParam(value="请求参数解释:couponId不用传，couponNumber会自动生成也不用传，isUsed不用传；优惠券名称；有效期timeRange格式2021-04-07~2021-10-13；折扣值；折扣类型；优惠券类型；suitCourse适用课程范围：couponType为单课程优惠券时，suitCourse则是课程general_id,同时会显示课程名courseName;couponType为特定课程优惠券时，suitCourse表示课程类别；couponType为全课程优惠券时，suitCourse为全部;couponType为机构课程优惠券时，suitCourse为机构id;",required = true) @RequestBody(required=true) AppCoupon requestData){
        int b = appCouponService.addCoupon(requestData.getCouponName(),requestData.getTimeRange(),requestData.getDiscount(), requestData.getDiscountType(), requestData.getCouponType(),requestData.getSuitCourse());
        if(b ==1){
            return ApiResponse.<String>builder().code(200).message("添加成功").data("true").build();
        }
        else{
            return ApiResponse.<String>builder().code(400).message("添加失败，检查传入的参数").data("false").build();
        }

    }

    @ApiOperation(value = "给用户添加一张优惠券", notes = "")
    @PostMapping("/list/{userId}")
    public ApiResponse<String> addMyCoupon(@ApiParam(value="请求参数解释:id不用传；用户id和优惠券id都需要填。表示用户获得了某一张优惠券",required = true) @RequestBody(required=true) AppMyCoupon requestData){
        int b = appCouponService.addMyCoupon(requestData.getUserId(),requestData.getCouponId(),requestData.getIsUsed());
        if(b ==1){
            return ApiResponse.<String>builder().code(200).message("添加成功").data("true").build();
        }
        else{
            return ApiResponse.<String>builder().code(400).message("添加失败，检查传入的参数").data("false").build();
        }

    }

    @ApiOperation(value = "用户通过兑换码领取一张优惠券", notes = "")
    @PostMapping("/exchangeCoupon")
    public ApiResponse<String> exchangeCoupon(@ApiParam(value="请求参数解释：用户id；兑换码couponNumber；是否使用isUsed,未使用为0，已使用为1",required = true) @RequestBody(required=true) ExchangeCoupon requestData){
        int b = appCouponService.exchangeCoupon(requestData.getUserId(),requestData.getCouponNumber(),requestData.getIsUsed());
        if(b ==1){
            return ApiResponse.<String>builder().code(200).message("添加成功").data("true").build();
        }
        else{
            return ApiResponse.<String>builder().code(400).message("添加失败，检查传入的参数").data("false").build();
        }

    }

    @ApiOperation(value = "查找用户关于某门课程的所有优惠券", notes = "该接口现在返回的是用户关于这门课程的优惠券，包含未过期和已过期的，区别是isOverdue为true则表示还没过期，false为过期。couponType为单课程优惠券时，suitCourse则是课程general_id,同时会显示课程名courseName;couponType为特定课程优惠券时，suitCourse表示课程类别；couponType为全课程优惠券时，suitCourse为全部;couponType为机构课程优惠券时，suitCourse为机构id;isUsed为1表示已经使用过了，0表示可使用")
    //注意是@PathVariable 不是@PathParam ；这个是路径传值
    @GetMapping("/getCourseCoupon")
    public ApiResponse<List<ReturnCoupon>> getCourseCoupon(@ApiParam(value="用户id",required = true) @RequestParam(value="userId",required=true) Long userId,
                                                           @ApiParam(value="课程generalId",required = true) @RequestParam(value="generalId",required=true) String generalId){
        List<ReturnCoupon> returnCouponEntities = appCouponService.getCourseCoupon(userId,generalId);
        if (returnCouponEntities.size()!=0){
            return ApiResponse.<List<ReturnCoupon>>builder().code(200).message("查找成功").data(returnCouponEntities).build();
        }
        else {
            return ApiResponse.<List<ReturnCoupon>>builder().code(400).message("该用户暂时没有该类优惠券").data(null).build();
        }
    }
}
